Skip Headers

Oracle® OLAP DML Reference 10g Release 2 (10.2) Part Number B14346-01 |
Home | Book List | Contents | Index | Master Index | Feedback

Previous | Next
| View PDF

# MODDAMP

The MODDAMP option specifies a weighting factor that damps out oscillations between iterations when you use the Gauss-Seidel method for solving simultaneous equations in a model. MODDAMP can allow the solution of models that would otherwise never converge because the oscillation between equations is stable. In these cases, the oscillations never decay without damping.

With the Gauss-Seidel method, Oracle OLAP tests each model equation for convergence or divergence in each iteration over a block of simultaneous equations. The tests are made by comparing the results of the current iteration to the results from the previous iteration. When MODDAMP specifies a weighting factor that is greater than zero, the value that Oracle OLAP tests and stores after each iteration is a weighted average of the current and previous results. For equations that oscillate between iterations, you can therefore use MODDAMP to damp out the oscillations and either prevent divergence or speed up the convergence of the equations.

Data type

DECIMAL

Syntax

MODDAMP = {n|0.00}

Arguments

n

  A decimal value, greater than or equal to zero and less than one, that specifies the weighting factor. The closer MODDAMP is to 0.00, the more weight is given to the value from the current iteration. The default value is 0.00, which gives full weight to the current iteration.

  When MODDAMP is greater than zero, Oracle OLAP calculates the weighted average for the current iteration as follows.

  calcvalue * (1 - MODDAMP) + weightavg

  where:

  - calcvalue is the value calculated from the model equation in the current iteration.

  - weightavg is the weighted average calculated in the previous iteration.

  See "Stored Weighted Average".

Notes

Specifying the Solution Method

The MODDAMP option is used only with the Gauss-Seidel method for solving simultaneous equations. The MODSIMULTYPE option determines the solution method that is being used. The possible settings for MODSIMULTYPE are `GAUSS`, for the Gauss-Seidel method, and `AITKENS`, for the Aitkens delta-squared method.

Effect of MODDAMP on Convergence Speed

MODDAMP is used in calculating the results of all model equations in every simultaneous block, whether they oscillate between iterations or not. For equations that do not oscillate, convergence is slowed down when the value of MODDAMP is greater than zero. Therefore, when your model contains some equations that oscillate and some that do not, you might be able to speed up overall convergence by setting MODDAMP to a small nonzero value, such as `0.20`. A small nonzero value will slow down the convergence of non-oscillating equations only slightly, while speeding up the convergence of oscillating equations.

Stored Weighted Average

When the model equation does not converge or diverge on the current iteration, the weighted average calculated in the current iteration is stored. In the next iteration, Oracle OLAP uses this stored average as weightavg (that is, the weighted average calculated in the previous iteration) in the formula for the weighted average.

In the first iteration over a block, Oracle OLAP uses the starting value of the target variable (or dimension value) as the weightavg (that is, the weighted average calculated in the previous iteration).

Iteration Results Compared

In tests for convergence and divergence in each iteration, Oracle OLAP compares the results of the current iteration to the results from the previous iteration. When MODDAMP is greater than zero, Oracle OLAP tests a comparison value that is calculated as follows.

(weightavg - weightavg) / (weightavg PLUS MODGAMMA)

where weightavg is the weighted average calculated in the previous iteration

For an explanation of the test for convergence, see MODTOLERANCE. For an explanation of the test for divergence, see MODOVERFLOW.

Options to Control the Solution of Simultaneous Blocks

Altering the value of MODDAMP is just one of the steps you can take in attempting to speed up or attain convergence of a simultaneous block. MODEL lists additional options that you can use to control the solution of simultaneous blocks and provides information on running and debugging models.

Examples

Example 17-6 Using the Default MODDAMP Value

The following statements trace a model called `income.bud`, specify that the Gauss-Seidel method should be used for solving simultaneous blocks, limit a dimension, and run the `income.bud` model.

    MODTRACE = YES
    MODSIMULTYPE = 'GAUSS'
    LIMIT division TO 'Camping'
    income.bud budget

These statements produce the following output.

    (MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS
    (MOD= INCOME.BUD) ITERATION 1: EVALUATION
    (MOD= INCOME.BUD) revenue = marketing * 300 - cogs
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 35) =  368.650399101
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 36) =  369.209604252
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 37) =  368.718556135
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 38) =  369.149674626
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 39) =  368.771110244
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 40) =  369.103479583
    (MOD= INCOME.BUD) END BLOCK 1

The MODDAMP option is set to its default value of 0.00. The equation for the Revenue line item converged in 40 iterations over a block of simultaneous equations. In the trace lines, you can see the results that were calculated for the Revenue line item in the final 6 iterations.

Example 17-7 Setting MODDAMP to Speed Up the Convergence of a Model

The following statements change the value of MODDAMP and run the `income.bud` model.

    MODDAMP = 0.2
    income.bud budget

These statements produce the following output.

    (MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS
    (MOD= INCOME.BUD) ITERATION 1: EVALUATION
    (MOD= INCOME.BUD) revenue = marketing * 300 - cogs
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 1) =  276.200000000
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 2) =  416.187139753
        ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 3) =  368.021098186
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 4) =  367.209906847
       ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 5) =  369.271224267
      ...
    (MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 6) =  368.965397407
    (MOD= INCOME.BUD) END BLOCK 1

In "Using the Default MODDAMP Value", the equation for the `Revenue` line item converged in 40 iterations. With MODDAMP set to `0.2` in the current example, the same equation converged in just 6 iterations.